# -*- coding: utf-8 -*-
import urllib2, string, re

print "Проверка новой версий по ссылке:\nhttp://ru.minecraftwiki.net/История_версий/Предварительные_сборки"
doc = urllib2.urlopen("http://ru.minecraftwiki.net/История_версий/Предварительные_сборки").read()

ver = re.findall('td>.*<sup i', doc); sp_ver = [ver[i][3:-6] for i in range (len(ver))]
#sp_ver = [re.findall('td>.*<sup i', doc)[i][3:-6] for i in range(31)]

date = re.findall('sup></td>\n<td>.*</td', doc); sp_date = [date[i][14:-4] for i in range (len(date))]


print u'\n     Список версий:'
for i in range(len(sp_date)): print '%s\t %s' % (sp_date[i].decode('utf-8'), sp_ver[i]); i+=1

w1 = raw_input(u'\n  Выбери версию: ')
r = [str(i) for i in range(1,len(sp_ver)+1)]; pr = w1 in r
if pr == True:
    w1 = sp_ver[int(w1)-1]
w1 = w1.replace('.', '_'); w1 = w1.replace(' preview', ''); w1 = w1.replace(' Pre-release', '')
        
w2 = raw_input(u'  Выбери тип: Клиент, Сервер (jar), Сервер (exe): ')
if w2 == u'Клиент' or w2 == 'c' or w2 == 'minecraft.jar' or w2 == '1': w2 = "http://assets.minecraft.net/%s/minecraft.jar" % (w1); print u'\n  Ссылка:',w2
if w2 == u'Сервер (jar)' or w2 == 's.jar' or w2 == 'minecraft_server.jar' or w2 == 'jar' or w2 == '2': w2 = "http://assets.minecraft.net/%s/minecraft_server.jar" % (w1); print u'\n  Ссылка:',w2
if w2 == u'Сервер (exe)' or w2 == 's.exe' or w2 == 'minecraft_server.exe' or w2 == 'exe' or w2 == '3': w2 = "http://assets.minecraft.net/%s/minecraft_server.exe" % (w1); print u'\n  Ссылка:',w2

w3 = raw_input(u'  Скачать? (y/n): ')
if w3 == 'Y' or w3 == 'y':
    url = w2; file_name = w2.split('/')[-1][:-4]+'_v'+w1+'.'+w2.split('.')[-1]
    u = urllib2.urlopen(url);f = open(file_name, 'wb');meta = u.info()
    f_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, f_size)

    f_size_dl = 0; block_sz = 1024; i=1
    print '     (kb)       connecting...   -'
    while True:
        buffer = u.read(block_sz)
        if not buffer: break
        f_size_dl += len(buffer);f.write(buffer)
        status = "%10d \t [%3.2f%%]\t" % (f_size_dl, f_size_dl * 100. / f_size)
        pr = int(f_size_dl * 100. / f_size);r = [o for o in range(0,110,10)]
        if pr >= r[i]: status = status + chr(8)*i; print status; i+=1    
    f.close()
raw_input(u'\t\t\t\tГотово!)\nPress Enter to exit')
